package com.sangen.utils;

import org.springframework.beans.BeanUtils;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @ClassName -> BeanCopyUtils
 * @Description 使用VO进行优化
 * @Author User
 * @Date 2023/4/23 14:31 星期日
 * @Version 3.3
 */
public class BeanCopyUtils {
    private BeanCopyUtils(){

    }
    //单个对象拷贝
    public static <V>V copyBean(Object source,Class<V> clazz) { //利用反射技术 ，拷贝一个对象到另一个对象上 传入的字节码对象是什么类型Object为什么类型
        //创建目标对象
        V result = null;
        try {
            result = clazz.newInstance();
            BeanUtils.copyProperties(source, result);//复制属性到目标对象上

        } catch (Exception e) {
            e.printStackTrace();
        }
        //返回结果
        return result;

    }

    //多个对象拷贝
    public static <V> List<V> copyBeanList(List<?> list, Class<V> clazz) { //如果List的泛型是Object类型 将来使用时传入的类型也必须是Object类型
       return list.stream()//转化为流
                .map(o -> copyBean(o, clazz))
                .collect(Collectors.toList()); //转化为List集合
    }

//    public static void main(String[] args) {
//        Article article = new Article();
//        article.setId(1L);
//        article.setTitle("aa");
//
//        HotArticleVo vo = copyBean(article, HotArticleVo.class);
//        System.out.println(vo);
//    }

}